package com.hfut.eeg.service;

import com.hfut.eeg.common.api.CommonResult;
import com.hfut.eeg.dao.SystemUseTimeMapper;
import com.hfut.eeg.dto.SystemUseTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;
/*
* @Auther tjf
* 设置系统时间操作
* 初始化系统使用时间，获取系统最开始投入使用的时间，获取系统今日开始使用时间
* 记录当天开始使用时间，获得系统总共使用时间，更新系统总共使用时间
* 获取病人每天平均检查时间和历史平均检查时间
* */

@Service
public class SystemUserTimeService {

    @Autowired
    SystemUseTimeMapper systemUseTimeMapper;

    /*
    * 插入系统开始使用的初始时间
    * 传入的参数，一个日期
    * */
    public long insertTime(String time){
        //定义时间类型 
        java.util.Date date = null;
        //设置时间格式
        SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd");
        try {
            //将字符型转换成日期型
            date = inputFormat.parse(time);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return systemUseTimeMapper.startTime(date.getTime());
    }
    /*
    * 获取系统开始投入使用的时间
    * 从数据库中获取到系统首次使用的时间点
    * 返回的参数，日期
    * */
    public CommonResult getInitTime(){
        long time = systemUseTimeMapper.getInitTime();
        java.util.Date date = new Date(time);
        SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd");
        String s =  inputFormat.format(date);
        Map map = new HashMap();
        map.put("StartUseTime",s);
        return CommonResult.success(map);
    }

    /*
    * 开机时，更新系统当前时间
    * 方便统计系统总共使用时间
    * */
    public long updateTime(){
        java.util.Date date1 = new java.util.Date();
        SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        long time = date1.getTime();
        return systemUseTimeMapper.updateTime(time);
    }

    /*
     * 实时获取系统当前和历史使用时间
     * 返回一个map集合
     * */
    public CommonResult getSyetime(){
        java.util.Date date1 = new java.util.Date();
        long time = date1.getTime();
        long time2 = systemUseTimeMapper.getTime();
        //共计秒数
        long ss=(time-time2)/(1000);
        //获取当前系统的使用时间
        //共计小时数
        int hh=(int)ss/3600;
        //获取历史系统的使用时间
        long total1 = systemUseTimeMapper.getTotalTime();
        long total2 =(Math.abs(time-time2) + total1)/(1000);
        //共计小时数
        int hh1=(int)total2/3600;
        //共计天数
        int dd1=(int)hh1/24;
        //共计月数
        int month = (int)dd1/30;
        //共计年数
        int year = (int)month/12;
        Map map = new HashMap();
        map.put("CurrentUseTimeHour",hh);
        map.put("HistoryUseTimeHour",hh1);
        map.put("HistoryUseTimeMonth",month);
        map.put("HistoryUseTimeYear",year);
        return CommonResult.success(map);
    }

    /*
     * 计算系统关机前使用时间
     * 把今日累计使用时间存入数据库
     * */
    public void totalSyetime(){
        java.util.Date date1 = new java.util.Date();
        long time = date1.getTime();
        long time2 = systemUseTimeMapper.getTime();
        long total=Math.abs(time-time2);
        long total1 = systemUseTimeMapper.getTotalTime();
        //历史时间加上今天使用的时间
        long total2 = total + total1;
        systemUseTimeMapper.updateSysTotaltime(total2);
    }

    /*
     * 计算当天检查病人所花费的总时间求平均值
     * */
    public CommonResult getDayPatientTime(Date date){
        //返回SystemUseTime的一个对象
        SystemUseTime time= systemUseTimeMapper.dayPatientTotalTime(date);
        //获取今天检查总的人数
        int totalpatient = time.getPatienttotal();
        //获取今天检查总的人数所花费的总时间
        long totalpatienttime = time.getPatientTotalTime();
        Map map = new HashMap();
        if(totalpatient == 0){
            map.put("TotalPatient",0);
            return CommonResult.failed("今日检查人数为0");
        }else{
            //计算检查的平均时间
            long aver = totalpatienttime/totalpatient;
            map.put("CurrentAver",aver);
            return CommonResult.success(map);
        }

    }

    /*
     * 计算历史检查病人花费的总时间求平均值
     * 返回一个map集合
     * */
    public CommonResult getHistoryPatientTime(){
        //返回SystemUseTime的一个对象
        SystemUseTime time= systemUseTimeMapper.historyPatientTotalTime();
        //获取历史检查总的人数
        int totalpatient = time.getPatienttotal();
        //获取病人历史检查总的时间
        long totalpatienttime = time.getPatientTotalTime();
        Map map = new HashMap();
        if(totalpatient == 0){
            map.put("TotalPatient",0);
            return CommonResult.failed("历史检查人数为0");
        }else{
            //计算历史平均检查时间
            long aver = totalpatienttime/totalpatient;
            //添加到map集合中
            map.put("HistoryAverage",aver);
            return CommonResult.success(map);
        }

    }
    /*
     * 计算今日检查过的病人的人数
     * 返回一个map集合
     * */
    public CommonResult getDayPatient(){
        java.util.Date date1 = new java.util.Date();
        java.sql.Date date = new java.sql.Date(date1.getTime());
        //返回SystemUseTime的一个对象
        SystemUseTime time= systemUseTimeMapper.dayPatientTotalTime(date);
        //获取今天检查总的人数
        int totalpatient = time.getPatienttotal();
        Map map = new HashMap();
        map.put("countDayPatient",totalpatient);
        return CommonResult.success(map);
    }

    /*
     * 计算历史检查过的病人的人数
     * 返回一个map集合
     * */
    public CommonResult getHistoryPatient(){
        //返回SystemUseTime的一个对象
        SystemUseTime time= systemUseTimeMapper.historyPatientTotalTime();
        //获取历史检查总的人数
        int totalpatient = time.getPatienttotal();
        Map map = new HashMap();
        map.put("countHistoryPatient",totalpatient);
        return CommonResult.success(map);

    }


}
